<template>
    <div style="height: 100%;">
        <!-- 提供地图容器  -->
        <div ref="map" style="height: 100%;"></div>
    </div>
</template>
<script>

import { get } from '@/utils/request'
import { mapMutations } from 'vuex';
export default {
    data() {
        return {
            // 存放所有设备信息 
            deviceData: []
        }
    },
    methods: {
        ...mapMutations(['SET_ED']),
        // 封装加载地图函数 
        loadMap() {
            AMapLoader.load({
                key: "fe4ecef811be731d7b5bc71cd6bff13e", //申请好的Web端开发者 Key，调用 load 时必填
                version: "2.0", //指定要加载的 JS API 的版本，缺省时默认为 1.4.15
            })
                .then((AMap) => {
                    // 创建地图图层
                    const map = new AMap.Map(this.$refs.map, {
                        pitch: 50, //地图俯仰角度，有效范围 0 度- 83 度
                        viewMode: '3D', //地图模式
                        rotateEnable: true, //是否开启地图旋转交互 鼠标右键 + 鼠标画圈移动 或 键盘Ctrl + 鼠标左键画圈移动
                        pitchEnable: true, //是否开启地图倾斜交互 鼠标右键 + 鼠标上下移动或键盘Ctrl + 鼠标左键上下移动
                        zoom: 17, //初始化地图层级
                        rotation: -15, //初始地图顺时针旋转的角度
                        zooms: [2, 20], //地图显示的缩放级别范围
                        center: [103.698965, 36.090771], //初始地 -图中心经纬度
                        terrain: true //开启地形图
                        // mapStyle: "amap://styles/normal", //设置地图的显示样式
                    });
                    const traffic = new AMap.TileLayer.Traffic({
                        autoRefresh: true, //是否自动刷新，默认为false
                        interval: 180, //刷新间隔，默认180s
                    });
                    map.add(traffic); //通过add方法添加图层
                    //异步加载控件
                    AMap.plugin(['AMap.ToolBar', 'AMap.HawkEye'], function () {
                        var toolbar = new AMap.ToolBar({
                            position: 'LB'
                        }); //缩放工具条实例化
                        map.addControl(toolbar); //添加控件
                        var hawkEye = new AMap.HawkEye();//鹰眼 
                        map.addControl(hawkEye);
                    });
                    // 遍历设备数组 
                    this.deviceData.forEach(item => {
                        const marker = new AMap.Marker({
                            position: item.position, //[]
                            title: item.name,
                            // 携带用户自定义数据 
                            extData: item
                        });

                        map.add(marker);
                    })
                })
                .catch((e) => {
                    console.error(e); //加载错误提示
                });
        },
        // 封装获取工程设备树
        async getEngData() {
            let res = await get('/dashboard/findEngineerDeviceTree');
            console.log(res, '工程设备树');

            // 将所有设备信息全部存放在数组中 
            let temp = [];
            res.data.forEach(item => {
                if (item.children.length > 0) {
                    item.children.forEach(it => {
                        temp.push(it);
                    })
                }
            });
            console.log(temp);
            this.deviceData = temp;
        }

    },
    async mounted() {
        await this.getEngData();
        this.loadMap();
    }
}
</script>
<style lang="less" scoped></style>